﻿#ifndef FILCOLORS_H
#define FILCOLORS_H

#include <QObject>
#include <QtQml>
#include <QColor>

#include "filaccentcolor.h"
#include "../common/stdafx.h"
#include "../common/singleton.h"

class FilColors : public QObject
{
    Q_OBJECT

    Q_PROPERTY_AUTO(QColor, Transparent)
    Q_PROPERTY_AUTO(QColor, Black)
    Q_PROPERTY_AUTO(QColor, White)
    Q_PROPERTY_AUTO(QColor, Grey10)
    Q_PROPERTY_AUTO(QColor, Grey20)
    Q_PROPERTY_AUTO(QColor, Grey30)
    Q_PROPERTY_AUTO(QColor, Grey40)
    Q_PROPERTY_AUTO(QColor, Grey50)
    Q_PROPERTY_AUTO(QColor, Grey60)
    Q_PROPERTY_AUTO(QColor, Grey70)
    Q_PROPERTY_AUTO(QColor, Grey80)
    Q_PROPERTY_AUTO(QColor, Grey90)
    Q_PROPERTY_AUTO(QColor, Grey100)
    Q_PROPERTY_AUTO(QColor, Grey110)
    Q_PROPERTY_AUTO(QColor, Grey120)
    Q_PROPERTY_AUTO(QColor, Grey130)
    Q_PROPERTY_AUTO(QColor, Grey140)
    Q_PROPERTY_AUTO(QColor, Grey150)
    Q_PROPERTY_AUTO(QColor, Grey160)
    Q_PROPERTY_AUTO(QColor, Grey170)
    Q_PROPERTY_AUTO(QColor, Grey180)
    Q_PROPERTY_AUTO(QColor, Grey190)
    Q_PROPERTY_AUTO(QColor, Grey200)
    Q_PROPERTY_AUTO(QColor, Grey210)
    Q_PROPERTY_AUTO(QColor, Grey220)
    Q_PROPERTY_AUTO_P(FilAccentColor *, Yellow)
    Q_PROPERTY_AUTO_P(FilAccentColor *, Orange)
    Q_PROPERTY_AUTO_P(FilAccentColor *, Red)
    Q_PROPERTY_AUTO_P(FilAccentColor *, Magenta)
    Q_PROPERTY_AUTO_P(FilAccentColor *, Purple)
    Q_PROPERTY_AUTO_P(FilAccentColor *, Blue)
    Q_PROPERTY_AUTO_P(FilAccentColor *, Teal)
    Q_PROPERTY_AUTO_P(FilAccentColor *, Green)
    QML_NAMED_ELEMENT(FilColors)
    QML_SINGLETON

private:
    explicit FilColors(QObject *parent = nullptr);

public:
    SINGLETON(FilColors)
    [[maybe_unused]] Q_INVOKABLE FilAccentColor *createAccentColor(const QColor &primaryColor);
    static FilColors *create(QQmlEngine *, QJSEngine *) {
        return getInstance();
    }
    Q_INVOKABLE QString colorToArgbString(const QColor &color);
    Q_INVOKABLE QColor argbStringToColor(const QString &str);
};

#endif // FILCOLORS_H
